<?php

namespace App\Http\Controllers\OperationManagement;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Models\OperationManagement\OtherAreas;
use Illuminate\Database\QueryException;
use Grimzy\LaravelMysqlSpatial\Types\Polygon;

/**
 * @group 基础信息管理->环卫数据导入->区域广场水域管理
 * 采用 restful api
 *
 * Body Parameters 表示请求的所需要的参数
 *
 * Query Parameters 表示返回参数的名称
 */
class OtherAreasController extends Controller
{
    /**
     * 区域广场水域查看列表----分页
     *
     * @bodyParam name string 区域名称
     * @bodyParam level int 养护等级
     * @bodyParam areas polygon 区域经纬度 (0 0,4 0,4 4,0 4,0 0)
     *
     * @queryParam name string 区域名称
     * @queryParam cname string 别名
     * @queryParam origin string 起点
     * @queryParam destination string 终点
     * @queryParam level int 养护等级
     * @queryParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam qy_areas string 区域面积
     * @queryParam girth string 区域围长
     * @queryParam type int 区域类型 0=广场  1=水域
     */
    public function index(Request $request)
    {
        $otherAreas = new OtherAreas;
        $data = $otherAreas->getList($request);
        return response()->json(encodeMsg($data,200));
    }


    /**
     * 新增区域广场水域
     *
     * @bodyParam name string 区域名称
     * @bodyParam cname string 别名
     * @bodyParam origin string 起点
     * @bodyParam destination string 终点
     * @bodyParam level int 养护等级
     * @bodyParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @bodyParam qy_areas string 区域面积
     * @bodyParam girth string 区域围长
     * @bodyParam type int 区域类型 0=广场  1=水域
     *
     * @queryParam name string 区域名称
     * @queryParam cname string 别名
     * @queryParam origin string 起点
     * @queryParam destination string 终点
     * @queryParam level int 养护等级
     * @queryParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam qy_areas string 区域面积
     * @queryParam girth string 区域围长
     * @queryParam type int 区域类型 0=广场  1=水域
     *
     */
    public function store(Request $request)
    {
        try {
            $data = $request->all();
            $areas = $request->input('areas','');
            if(!empty($areas)){
                $data['areas'] = Polygon::fromString($areas);
            }
            $data = OtherAreas::create($data);
            return response()->json(encodeMsg($data,201));
        } catch (QueryException $e) {
            // dd($e);
            return response()->json(encodeMsg(['message' => '数据添加失败!'],400));
        }
    }

    /**
     * 查看区域广场水域
     *
     * @bodyParam id int required  园林ID
     *
     * @queryParam name string 区域名称
     * @queryParam cname string 别名
     * @queryParam origin string 起点
     * @queryParam destination string 终点
     * @queryParam level int 养护等级
     * @queryParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam qy_areas string 区域面积
     * @queryParam girth string 区域围长
     * @queryParam type int 区域类型 0=广场  1=水域
     *
     */
    public function show($id)
    {
        //创建模型
        $OtherAreas = OtherAreas::find($id);
        if($OtherAreas == []) {
            return response()->json(encodeMsg(["message" => "没有该区域信息!"], 404));
        } else {
            return response()->json(encodeMsg($OtherAreas,200));
        }
    }

    /**
     * 修改区域广场水域
     *
     * @bodyParam id string 项目名称id
     * @bodyParam name string 区域名称
     * @bodyParam cname string 别名
     * @bodyParam origin string 起点
     * @bodyParam destination string 终点
     * @bodyParam level int 养护等级
     * @bodyParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @bodyParam qy_areas string 区域面积
     * @bodyParam girth string 区域围长
     * @bodyParam type int 区域类型 0=广场  1=水域
     *
     * @queryParam name string 区域名称
     * @queryParam cname string 别名
     * @queryParam origin string 起点
     * @queryParam destination string 终点
     * @queryParam level int 养护等级
     * @queryParam areas string 区域经纬度 (0 0,4 0,4 4,0 4,0 0),(1 1, 2 1, 2 2, 1 2,1 1)
     * @queryParam qy_areas string 区域面积
     * @queryParam girth string 区域围长
     * @queryParam type int 区域类型 0=广场  1=水域
     *
     */
    public function update(Request $request,$id)
    {
        //创建模型
        $OtherAreas = OtherAreas::find($id);
        if($OtherAreas == []) {
            return response()->json(encodeMsg(["message" => "没有该区域信息!"], 404));
        }
        try {
            $data = $request->all();
            $areas = $request->input('areas','');
            if(!empty($areas)){
                $data['areas'] = Polygon::fromString($areas);
            }
            $OtherAreas->update($data);
            return response()->json(encodeMsg($OtherAreas,200));
        } catch (QueryException $e) {
            return response()->json(encodeMsg(['message' => '数据修改失败!'],400));
        }
    }

    /**
     * 删除区域广场水域
     *
     * @bodyParam id int required  表ID
     * @response 204 {
     *   "message": "删除成功"
     * }
     *
     *
     * @response 404 {
     *  "message": "没有该园林信息"
     * }
     */
    public function destroy($id)
    {
        //创建模型
        $OtherAreas = OtherAreas::find($id);
        if($OtherAreas == []) {
            return response()->json(encodeMsg(["message" => "没有该区域信息!"], 404));
        }
        if($OtherAreas->delete()) {
            return response()->json(encodeMsg(["message" => "删除成功"], 204));
        } else {
            return response()->json(encodeMsg(["message" => "删除失败"], 400));
        }
    }

    /**
     * 批量删除环卫区域
     *
     * @bodyParam ids int required id集合字符串[格式：ids=1,2,3]
     * @response 204 {
     *   "message": "环卫区域信息删除成功"
     * }
     *
     *
     */
    public function delete($ids)
    {
        $listId = explode(',', $ids);
        OtherAreas::whereIn('id',$listId)->delete();
        return response()->json(encodeMsg(["message" => "信息删除成功!"], 204));
    }
}
